// 在Promise原型对象中添加finally方法，该方法用于状态转化后的结果不管是否成功，都会执行该方法。
// 主要用于兼容IOS不支持promise的finally方法
if(!Promise.prototype.finally){
    Promise.prototype.finally = function (callback) {
        let P = this.constructor;
        return this.then(
            value => P.resolve(callback()).then(() => value),
            reason => P.resolve(callback()).then(() => { throw reason })
        );
    };
}

/**
 * 请求API
 * @param  {String}   url         接口地址
 * @param  {Object}   params      请求的参数
 * @param  {String}   method      请求类型
 * @param  {String}   contentType 请求格式
 */
const requestApi = (url, token, params, method, contentType) => {
    return new Promise((resolve, reject) => {
        wx.request({
            url: url,
            method: method,
            data: params,
            header: {
                'Content-Type': contentType,
                'UT-Token': token
            },
            success (res) {
                if(res.statusCode & res.statusCode != 200) {
                    reject(res)
                    return
                }
                resolve(res.data)
            },
            fail (err) {
                reject(err)
            }
        })
    });
}

/**
 * POST请求API
 * @param  {String}   url         接口地址
 * @param  {String}   token       请求接口时的Token
 * @param  {Object}   params      请求的参数
 * @param  {String}   contentType 请求格式
 */
function requestPostApi (url, token, params, contentType) {
    return requestApi(url, token, params, 'POST', contentType)
}

/**
 * GET请求API
 * @param  {String}   url         接口地址
 * @param  {String}   token       请求接口时的Token
 * @param  {Object}   params      请求的参数
 * @param  {String}   contentType 请求格式
 */
function requestGetApi (url, token, params, contentType) {
    return requestApi(url, token, params, 'GET', contentType)
}

module.exports = {
    requestPostApi,
    requestGetApi
}
